package cn.feng.thinkInJava.a9_3_容器.containers.a17_08_01;

//: containers/Maps.java
// Things you can do with Maps.
import java.util.concurrent.*;
import java.util.*;
import net.mindview.util.*;
import static net.mindview.util.Print.*;

/**性能
 * @author fengyu
 * @date  2015年8月9日
 */
public class Maps
{
	public static void printKeys(Map<Integer,String> map)
	{
		printnb("Size = "+map.size()+", ");
		printnb("Keys: ");
		print(map.keySet()); // Produce a Set of the keys
	}
	
	public static void test(Map<Integer,String> map)
	{
		print(map.getClass().getSimpleName());
		map.putAll(new CountingMapData(25));
		// Map has 'Set' behavior for keys:
		map.putAll(new CountingMapData(25));
		printKeys(map);
		// Producing a Collection of the values:
		printnb("Values: ");
		print(map.values());
		print(map);
		print("map.containsKey(11): "+map.containsKey(11));
		print("map.get(11): "+map.get(11));
		print("map.containsValue(\"F0\"): "+map.containsValue("F0"));
		Integer key=map.keySet().iterator().next();
		print("First key in map: "+key);
		map.remove(key);
		printKeys(map);
		map.clear();
		print("map.isEmpty(): "+map.isEmpty());
		map.putAll(new CountingMapData(25));
		// Operations on the Set change the Map:
		map.keySet().removeAll(map.keySet());
		print("map.isEmpty(): "+map.isEmpty());
	}
	
	public static void main(String[] args)
	{
		test(new HashMap<Integer,String>());
		test(new TreeMap<Integer,String>());
		test(new LinkedHashMap<Integer,String>());
		test(new IdentityHashMap<Integer,String>());
		test(new ConcurrentHashMap<Integer,String>());
		test(new WeakHashMap<Integer,String>());
	}
} /*
 * Output: HashMap Size = 25, Keys: [15, 8, 23, 16, 7, 22, 9, 21, 6, 1, 14, 24,
 * 4, 19, 11, 18, 3, 12, 17, 2, 13, 20, 10, 5, 0] Values: [P0, I0, X0, Q0, H0,
 * W0, J0, V0, G0, B0, O0, Y0, E0, T0, L0, S0, D0, M0, R0, C0, N0, U0, K0, F0,
 * A0] {15=P0, 8=I0, 23=X0, 16=Q0, 7=H0, 22=W0, 9=J0, 21=V0, 6=G0, 1=B0, 14=O0,
 * 24=Y0, 4=E0, 19=T0, 11=L0, 18=S0, 3=D0, 12=M0, 17=R0, 2=C0, 13=N0, 20=U0,
 * 10=K0, 5=F0, 0=A0} map.containsKey(11): true map.get(11): L0
 * map.containsValue("F0"): true First key in map: 15 Size = 24, Keys: [8, 23,
 * 16, 7, 22, 9, 21, 6, 1, 14, 24, 4, 19, 11, 18, 3, 12, 17, 2, 13, 20, 10, 5,
 * 0] map.isEmpty(): true map.isEmpty(): true ...
 *///:~
